using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class WeaponShotGun : WeaponRemote
{
    public int bulletCount = 6; // 每发子弹数量
    public float spreadAngle = 15f; // 总扩散角度（两侧各占一半）

    public override void FireBullet(Vector2 attackDirection)
    {
        Vector2 fireDirection = attackDirection.normalized;
        // 2. 生成多颗子弹，计算每颗的扩散方向
        for (int i = 0; i < bulletCount; i++) 
        {
            // 计算当前子弹的角度偏移
            float angle = GetSpreadAngle(i);

            // 将角度偏移应用到发射方向上，得到最终移动方向
            Vector2 bulletDir = RotateVector(fireDirection, angle);

            //调用对象池实例，并通过回调函数初始话子弹，（设置子弹位置、设置子弹脚本）
            GameObject bullet = PoolManager.Instance.Get(bulletPrefab, (bullet) =>
            {
                bullet.transform.position = muzzle.position;

                bullet.GetComponent<Object_PlayerBullet>()?.SetupBullet(bulletDir, _damage, _weaponStat.GetMoveSpeed());
            });
        }
    }

    
    // 计算第i颗子弹的角度偏移（两种模式可选）
    private float GetSpreadAngle(int index) 
    {
        if (bulletCount == 1)
            return 0; // 只有1颗子弹时无偏移

        float totalSpread = spreadAngle; // 总扩散角度

        float step = totalSpread / (bulletCount - 1); // 每颗子弹的角度间隔
        
        return -totalSpread / 2 + step * index; // 从左到右分布
    }

    // 将向量旋转指定角度（度）
    private Vector2 RotateVector(Vector2 vector, float angleDeg) {
        float angleRad = angleDeg * Mathf.Deg2Rad;

        float cos = Mathf.Cos(angleRad);
        float sin = Mathf.Sin(angleRad);

        return new Vector2(
            vector.x * cos - vector.y * sin,
            vector.x * sin + vector.y * cos
        );
    }
}
